package Scripts

import (
	"fmt"
	"io/ioutil"
	"net/http"
	"os"
	"os/exec"
	"time"
)
var (
	FFMPEG_PATH string
	NodePath string
)
func Init(ffmpegPath,nodePath string) {
	FFMPEG_PATH = ffmpegPath
	NodePath = nodePath
}
// init 初始化，赋值
func init() {
	Init(FFMPEG_PATH,NodePath)
}

// 下载install脚本，运行
func RUN_main(Go_Box_path,filename,BotPath string) {
	//获取配置文件
	
	// 定义 URL 到文件名的映射关系
	fileToURL := map[string]string{
		"repair.sh": "https://gitee.com/Liplay-1/YBOX_2/raw/master/GoBox/scripts/repair.sh",
		"python.sh": "https://gitee.com/Liplay-1/YBOX_2/raw/master/GoBox/scripts/python.sh",
		"install.sh": "https://gitee.com/Liplay-1/YBOX_2/raw/master/GoBox/scripts/install.sh",
		"install2.sh": "https://gitee.com/Liplay-1/YBOX_2/raw/master/GoBox/scripts/install2.sh",
		"Api.sh": "https://gitee.com/Liplay-1/YBOX_2/raw/master/GoBox/scripts/Api.sh",
	}
	//根据文件名获取URL
	filename = filename
	url, ok := fileToURL[filename]
	if !ok {
		fmt.Println("文件名不存在")
		return
	}
	//切换Go_Box目录
	os.Chdir(Go_Box_path)
	// 读取配置文件，获取NodePath

	filepath := Go_Box_path + "/scripts/" + filename //文件路径
	//不存在文件夹，创建
	scripts := Go_Box_path + "/scripts"
	if _, err := os.Stat(scripts); os.IsNotExist(err) {
		os.Mkdir(scripts, 0755)
	}
	if _, err := os.Stat(filepath); os.IsNotExist(err) {
		//绿色输出
		fmt.Println("\033[32m", "文件不存在,获取中...", "\033[0m")
		//文件不存在，下载install.py
		Url_update(url, filepath)
		//判断是否存在install.py
		if _, err := os.Stat(filepath); os.IsNotExist(err) {
			//红色输出
			fmt.Println("\033[31m", "文件下载失败，请检查网络...", "\033[0m")
			//运行完毕，返回
			return
		} else {
			fileInfo, _ := os.Stat(filepath)
			modTime := fileInfo.ModTime()
			fmt.Println("\033[32m", "文件下载成功，更新时间为：", modTime.Format("2006-01-02 15:04:05"), "\033[0m")
		}

		//睡眠2秒
		time.Sleep(2 * time.Second)

	} else {
		fileInfo, _ := os.Stat(filepath)
		modTime := fileInfo.ModTime()
		// //获取当前时间
		now := time.Now()
		// //获取时间差
		diff := now.Sub(modTime)
		// //如果时间差大于12小时，重新下载
		if diff.Hours() > 12 {
			Url_update(url, filepath)
			fmt.Println("\033[32m", "文件已存在，正在获取最新...", "\033[0m")
		}
	}
	//运行脚本，并且可以交互,有BotPath就运行BotPath
	if BotPath != "" {
		cmd := exec.Command("bash", filepath,BotPath)
		cmd.Dir = Go_Box_path
		cmd.Stdout = os.Stdout
		cmd.Stdin = os.Stdin
		cmd.Stderr = os.Stderr
		cmd.Run()
	} else {
		cmd := exec.Command("bash", filepath)
		cmd.Dir = Go_Box_path
		cmd.Stdout = os.Stdout
		cmd.Stdin = os.Stdin
		cmd.Stderr = os.Stderr
		cmd.Run()
	}

	//运行完毕，返回
	return
}


func Url_update(url string, filename string) {
	url = url
	filename = filename
	resp, err := http.Get(url)
	if err != nil {
		panic(err)
	}
	defer resp.Body.Close()
	body, err := ioutil.ReadAll(resp.Body)
	if err != nil {
		panic(err)
	}
	err = ioutil.WriteFile(filename, body, 0755)
	if err != nil {
		panic(err)
	}

}
